//引入axios
import axios from "axios";
//引入进度条插件+引入人家的样式
import nprogress from "nprogress";
import "nprogress/nprogress.css";
// 引入uuid唯一标识
import { v4 as uuidv4 } from 'uuid';

function GetUserTempId() {
  // 判断本地是否存储用户登录的唯一标识
  let userid = localStorage.getItem('userId')
  // 如果没有就创建一个,如果有的话就使用已有的
  if (!userid) {
    let id = uuidv4()
    localStorage.setItem('userId', id)
  }
  return userid;
}

//加载小球隐藏
nprogress.configure({ showSpinner: false })
//axios.create方法执行:返回也是axios
const request = axios.create({
  baseURL: '/interface',//请求基础路径
  timeout: 5000,//超时的时间
});

//请求拦截器:只要发请求(发请求之前触发) config:配置对象
request.interceptors.request.use((config) => {
  //请求之前进度条开始动
  nprogress.start();
  config.headers.userTempId = GetUserTempId()
  //config.headers.token = 123;
  //需要把配置对象返回:最重要的一件事情,请求头携带公共参数
  return config;
})

//响应拦截器
request.interceptors.response.use((res) => {
  //进度条消失
  nprogress.done();
  //简化服务器返回的数据
  return res.data;
}, (error) => {
  //一般统一处理网络错误
  //网络错误状态码
  const status = error.response.status;
  switch (status) {
    case 404:
      alert('请求失败');
      break;
    case 403:
      alert('未授权');
      break;
    case 500 || 501 || 502 || 503 || 504:
      alert('服务器BBQ');
      break;
  }
  return new Promise((resolve, reject) => { });
});
//默认暴露:组件或者其他地方使用不了！！！
export default request;

